<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"
%><%@ page import="com.fefa.coins.html.CommonHTML"
%><%@ page import="com.fefa.coins.domain.GestionContable"
%><%@ page import="com.fefa.coins.domain.GestionColecciones"
%><%@ page import="com.fefa.coins.db.MonedaColeccion"
%><%
	String path = request.getContextPath();
	//TODO - Aquí hay que verificar el usuario
	Integer idSocio = new Integer(1);
	long idApunte = 0;
	if (null != request.getParameter("id"))
		idApunte = Long.parseLong((String)request.getParameter("id"));

	String title=null;
	if (idApunte > 0) 
		title = "Modificación Apunte";
	else
		title = "Nuevo Apunte";
	
%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<%=CommonHTML.buildHead(path, title)%>
<body>
	<script type="text/javascript">
		// Definicion de variables  generales ----------------------------------
		var COL_UNIDADES = 4;
		var COL_PRECIO = 5;
		var COL_IMPORTE = 6;
		var COL_UNIDADES_REAL = 7;
		var COL_PRECIO_REAL = 8;
		var COL_IMPORTE_REAL = 9;
		
		window.onbeforeunload = function() {
			// TODO - Verificar sólo si ha tocado algo (evento cambio importe, añadir y/o quitar moneda o futura 
			return '¿Quiere perder los datos introducidos?';
			}
		
		function getFloat(data) {
			// TODO - Ojo con separadores, signos, etc.
			var f = parseFloat(data);
			if (isNaN(f))
				f = 0;
			return f; 
		}
		
		function validateFloat(data) {
			// TODO - Buscar alguna mejor
			var f = parseFloat(data);
			if (isNaN(f))
				alert("Valor numérico incorrecto.");
			return f; 
		}
		
		// Modificacion del importe previsto de una moneda ----------------------
		function impPrevUpdated(rowId) {
			return impUpdated(rowId, COL_UNIDADES, rowId+".precioPrev", COL_IMPORTE); 
		}
		
		// Modificacion del importe previsto de una moneda ----------------------
		function impRealUpdated(rowId) {
			return impUpdated(rowId, COL_UNIDADES_REAL, rowId+".precioReal", COL_IMPORTE_REAL); 
		}
		
		// Modificacion del importe previsto de una moneda ----------------------
		function impUpdated(filaId, unidId, precioId, impId) {
			var precio = validateFloat(document.getElementById(precioId).value);
			if (!isNaN(precio)) {
				var fila=document.getElementById(filaId);
				var unid=getFloat(fila.cells[unidId].innerHTML);
				var importe = unid * precio;
		        fila.cells[impId].innerHTML=importe;
				// TODO - Formatear el importe
				// TODO - Totales de la tabla?
			}
		}

		// Recalculo del importe del apunte -------------------------------------	
		function recalculaImporte() {
			var colNum = COL_IMPORTE_REAL;
			if (document.getElementById('detalle.futura').checked) 
				colNum = COL_IMPORTE;
				
			var tabla=document.getElementById('tabla.monedas');
			var impTotal = 0;
			var impMoneda = 0;
			for (var i=2; i < tabla.rows.length; i++) {
				impMoneda = getFloat(tabla.rows[i].cells[colNum].innerHTML);
				impTotal += impMoneda;
			}
			impTotal = impTotal * -1;
			document.getElementById('detalle.importe').value=impTotal;
		}
		
		// Pasa de Compra Futura a Definitiva y viceversa -------------------------
		// ¿Se permite o se deja en la conversación general (si estoy modificando)?
		function compraFutura(isFuture) {
			var tabla=document.getElementById('tabla.monedas');
			if (!isFuture) {
				for (var i=2; i < tabla.rows.length; i++) {
					tabla.rows[i].cells[COL_UNIDADES_REAL].innerHTML=tabla.rows[i].cells[COL_UNIDADES].innerHTML;
					tabla.rows[i].cells[COL_IMPORTE_REAL].innerHTML=tabla.rows[i].cells[COL_IMPORTE].innerHTML;
					var rowId = tabla.rows[i].id;
					var precioPrev = document.getElementById(rowId+".precioPrev");
					var precioReal = document.getElementById(rowId+".precioReal");
					precioReal.value = precioPrev.value;
					precioReal.disabled = false;
					precioPrev.disabled = 'disabled';
		//		TODO - ¿Se calculan totales?
				}
			} else {
				for (var i=2; i < tabla.rows.length; i++) {
					tabla.rows[i].cells[COL_UNIDADES_REAL].innerHTML='0';
					tabla.rows[i].cells[COL_IMPORTE_REAL].innerHTML='0.0';
					var rowId = tabla.rows[i].id;
					var precioPrev = document.getElementById(rowId+".precioPrev");
					var precioReal = document.getElementById(rowId+".precioReal");
					precioReal.value = '0.0';
					precioReal.disabled = 'disabled';
					precioPrev.disabled = false;
		//		TODO - ¿Se calculan totales?
				}
			}
		}

		// Desasocia una moneda del apunte ----------------------------------------
		function quitarMoneda(rowId) {
			var tabla = document.getElementById('tabla.monedas');
			var row = document.getElementById(rowId);
			tabla.deleteRow( row.rowIndex  );
			recalculaColoresFilas();			
		}
		
		function recalculaColoresFilas() {
			var tabla = document.getElementById('tabla.monedas');
			var className = 'gridEven';
			
			for (var f=2; f < tabla.rows.length; f++) {
				var row=tabla.rows[f];
				for (var c=0; c < row.cells.length; c++) 
					row.cells[c].className=className;
				if (className == 'gridEven')
					className = 'gridOdd';
				else
					className = 'gridEven';
			}
		}

		// Abrir seleccion de monedas --------------------------------------------- 
		function seleccionMonedas() {
			var pedido = document.getElementById('lPedidos').value;
			if (pedido == 0) {
				alert("Sólo se pueden añadir monedas al apunte si este está asociado a un pedido");
				return;
			} 			
			var url="<%=path%>/jsps/adm/colecciones/Operaciones.jsp" +
			"?operacion=<%=GestionColecciones.OP_VENTANA_SELECCION%>";
			AjaxGetText(url, respuestaSeleccionMonedas);
		} 
		function respuestaSeleccionMonedas(resp) { 
			var vWinCal = window.open("", "Seleccion Monedas", 
			"width=850,height=650,directories=no,menubar=no,status=no,resizable=no,scrollbars=yes,toolbar=no,top=10,left=10");
			vWinCal.opener = self;
			var cal_doc = vWinCal.document;
			cal_doc.write(resp);
			cal_doc.close();
		}

		// Añadir Moneda ------------------------------------------------------------------------
		function addMoneda(idMoneda, addInfo, sourceRow, initCol) {
			var addData = addInfo.split(";");
			var rowId = 'moneda.' + idMoneda;
			
			// Sólo se puede asociar si el apunte está asociado a un pedido.
			var pedido = document.getElementById('lPedidos').value;
			if (pedido == 0) {
				alert("Sólo se pueden añadir monedas al apunte si este está asociado a un pedido");
				return;
			} 			
			// Verifico que la moneda pertenece a ese pedido.
			if (pedido != addData[2]) {
				alert("La moneda seleccionada está asociada a otro pedido.");
				return;
			}
			// Compruebo que el estado sea  reserva, en compra o pagada.
			if ((addData[1] != <%=MonedaColeccion.ESTADO_RESERVADA%>) &&
				(addData[1] != <%=MonedaColeccion.ESTADO_EN_COMPRA%>) &&
				(addData[1] != <%=MonedaColeccion.ESTADO_PAGADA%>)) {
				alert("La moneda no está siendo gestionada por el pedido");
				return;
			}
			// Compruebo que la moneda a añadir no está en otro apunte
			var apunte = <%=idApunte%>;
			if ((apunte > 0) && (apunte != addData[3]) && (addData[3] != 0) && (addData[3] != 'null')) {
				alert("La moneda seleccionada está asociada a otro apunte.");
				return;
			}
			// Compruebo que no está repetida la moneda
			var fila=document.getElementById(rowId);
			if (null != fila) {
				alert("Esta moneda ya está asociada al apunte");
				return;
			}
			
			// Creo una nueva fila al final.
			var tabla = document.getElementById('tabla.monedas');
			var newRow = tabla.insertRow(tabla.rows.length);
			var clName = 'gridOdd';
			if ((tabla.rows.length % 2) == 1)
				clName = 'gridEven';
			newRow.id = rowId;

			// Creo las columnas
			// Celda: Quitar Moneda
			var celda = newRow.insertCell(-1);
			celda.innerHTML="<a href=\"javascript:quitarMoneda('" + rowId + 
				"');\"><img src='<%=path%>/images/b_borrar.png' width='14' height='14' title='Quitar Moneda'/></a>";
			newRow.cells[0].className=clName;
			// Celda: Pais
			celda = newRow.insertCell(-1);
			celda.innerHTML=sourceRow.cells[initCol].innerHTML;
			newRow.cells[1].className=clName;
			// Celda: Año
			celda = newRow.insertCell(-1);
			celda.innerHTML=sourceRow.cells[2].innerHTML;
			newRow.cells[2].className=clName;
			// Celda: Facial
			celda = newRow.insertCell(-1);
			celda.innerHTML=sourceRow.cells[3].innerHTML;
			newRow.cells[3].className=clName;
			// Celda: Unidades Prevists
			celda = newRow.insertCell(-1);
			celda.innerHTML=sourceRow.cells[5].innerHTML;
			newRow.cells[4].className=clName;
			var unid = getFloat(newRow.cells[4].innerHTML);
			// Celda: Precio Previsto
			var futuraDisabled = '';
			var realDisabled = '';
			if (document.getElementById('detalle.futura').checked)
				realDisabled = "  disabled='disabled'"; 
			else
				futuraDisabled = "  disabled='disabled'"; 
						var unid = getFloat(newRow.cells[4].innerHTML);
			var precio = getFloat(sourceRow.cells[6].innerHTML);
			var input = "<input id='" + rowId + ".precioPrev' type='text' size='8' value='" + 
				precio + 
				"' onchange=\"impPrevUpdated('" + rowId + "')\"" +
				futuraDisabled + " />";
			celda = newRow.insertCell(-1);
			celda.innerHTML=input;
			newRow.cells[5].className=clName;
			// Celda: Importe Previsto
			var importe = unid * precio;
			celda = newRow.insertCell(-1);
			celda.innerHTML=importe;
			newRow.cells[6].className=clName;
			// Celda: Unidades Reales
			celda = newRow.insertCell(-1);
			celda.innerHTML=sourceRow.cells[7].innerHTML;
			newRow.cells[7].className=clName;
			unid = getFloat(newRow.cells[7].innerHTML);
			// Celda: Precio Real
			precio = getFloat(sourceRow.cells[8].innerHTML);
			input = "<input id='" + rowId + ".precioReal' type='text' size='8' value='" + 
				precio + 
				"' onchange=\"impRealUpdated('" + rowId + "')\"" +
				realDisabled + " />";
			celda = newRow.insertCell(-1);
			celda.innerHTML=input;
			newRow.cells[8].className=clName;
			// Celda: Importe Previsto
			importe = unid * precio;
			celda = newRow.insertCell(-1);
			celda.innerHTML=importe;
			newRow.cells[9].className=clName;
			
			
			// ¿Calcular Totales?
		}

		// Cancela la Operacion -------------------------------------------
		function cancelar() {
			window.history.back();
		}
		
		// Cambio de pedido -----------------------------------------------
		function pedidoChanged() {
			var tabla = document.getElementById('tabla.monedas');
			var celda = document.getElementById("pedidoActual");
			var actual = getFloat(celda.innerHTML);
			var nuevo = document.getElementById('lPedidos').value;

			if (actual == 0) {
				celda.innerHTML = nuevo
			} else {
				var resp=true;
				if (tabla.rows.length > 2) 
					resp = confirm("Cambiar de pedido implica la desasociación de las monedas\n¿Estás seguro?");
				if (resp == true) {
					for (var f=tabla.rows.length - 1; f > 1; f--) {
						var row=tabla.rows[f];
						tabla.deleteRow( row.rowIndex  );
					}
					celda.innerHTML = nuevo
				 } else {
					document.getElementById('lPedidos').value=actual;
				}
			}
		}

		// Aceptar -----------------------------------------------------------------------
		function aceptar() {
			var url="<%=path%>/jsps/adm/contabilidad/OperacionesXML.jsp";
			// TODO - Validar datos numericos, obligatorios, etc.
			var parametros="operacion=<%=GestionContable.OP_GRABAR_APUNTE%>" +
				"&idApunte=<%=idApunte%>"+
				"&descripcion=" + document.getElementById("descripcion").value +
				"&fecha=" + document.getElementById("fecha").value +
				"&importe=" + document.getElementById("detalle.importe").value + 
				"&observaciones=" + document.getElementById("observaciones").value +
				"&idPedido=" + document.getElementById("lPedidos").value +
				"&prevision=";
			if (document.getElementById("detalle.futura").checked)
				parametros += "true";
			else
				parametros += "false";
				
			var tabla = document.getElementById('tabla.monedas');
			for (var f=2; f < tabla.rows.length ; f++) {
				parametros += "&idMoneda=" + tabla.rows[f].id.substr(7);
				parametros += "&precioPrev=" + document.getElementById(tabla.rows[f].id + ".precioPrev").value;
				parametros += "&precioReal=" + document.getElementById(tabla.rows[f].id + ".precioReal").value;
			}
			AjaxPostXML(url, parametros,respuestaAceptar);
		}
		function respuestaAceptar(xmlDoc) { 
			if (showResult(xmlDoc)) {
				// TODO - Setear el idApunte
			}
		}
		
	</script>

		<%=CommonHTML.buildHeader(path, CommonHTML.MENU_GESTION) %>
		<div id="wrapper">
			<div id="page">
				<div id="content">
					<%=GestionContable.mttoApunte(idApunte, idSocio, path) %>
				</div><!-- content --> 

<%=CommonHTML.buildMngmtSubMenu(path)%>

				<div style="clear: both;">&nbsp;</div>
			</div> <!-- Page -->
		</div> <!-- wrapper -->
		<%=CommonHTML.buildFooter() %>
	</body>
</html>
